package day12;
//volatile原子性测试
public
class Demo2 implements Runnable{
    volatile int count=0;//商品数量
    public void run(){
        for (int i=0;i<1000;i++){
            //volatile不能保证复合操作都成功，都失败
            //但是可以保证属性的单个操作的原子性，所以volatile不可以保证线程安全
//            count++; 包括读取count，count+1，赋值给count
            //synchronized可以保证线程安全，但是会影响性能，因为synchronized是重量级锁，会阻塞线程，所以不建议使用synchronized
            synchronized (this) {
                count++;
                System.out.println(Thread.currentThread().getName() + "购买了第" + count + "件商品");
            }
        }
    }

    public static
    void main(String[] args) {
        Demo2 d=new Demo2();
        for (int i=0;i<100;i++){
            new Thread(d,"线程"+i).start();
        }
    }
}
